<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of paginas
 *
 * @author Juliano
 */
class paginas extends Loadview {

    public $db;
    public $tabelaPagina = "cms_paginas";
    protected $route;

    public function __construct() {
        parent::__construct();
        
        /*INSTACIA EM TEMPO DE EXECUCAO A CLASSE DB*/
        $this->db = new Dbconnection();
        
        /*INSTACIA EM TEMPO DE EXECUCAO A CLASSE DE ROTAS*/
        $this->route = loadClass::implementCoreClass("route/routes");
        
        /*INSTACIA EM TEMPO DE EXECUCAO A CLASSE o modulo de criar as abas*/
        loadClass::implementModelClass("modules/tabs/mod_tabs")->setupModule();
    }

    public function index() {
        //define qual pasta da view esta o arquivo tpl
        //mais info deste metodo http://www.smarty.net/docs/en/api.add.template.dir.tpl
        $this->addTemplateDir(str_replace("\\", "/", BASEPATH . "views/paginas/"), 'paginas');
        
        if($this->route->getRoute() == 'paginas/cadastrar' && $_SERVER['REQUEST_METHOD']==='POST'){
            echo $this->cadastrar();
        }else if($this->route->getRoute() == 'paginas/atualizar' && $_SERVER['REQUEST_METHOD']==='POST'){
           echo $this->atualizar(filter_input(INPUT_GET, 'id'));
        }else if($this->route->getRoute() == 'paginas/delete' && $_SERVER['REQUEST_METHOD']==='POST'){
            echo $this->deletar(filter_input(INPUT_POST, 'id'));
        }else if($this->route->getRoute() == 'paginas/alteramodo' && $_SERVER['REQUEST_METHOD']==='POST'){
            echo $this->alteraModo(filter_input(INPUT_POST, 'id_pagina'), filter_input(INPUT_POST, 'modelo'));
        }else{
            $this->assign("listar", $this->listar($_GET['id']));
            $this->loadView("file:[paginas]paginas.tpl", true);   
        }
    }
    
    /*metodo que conserva as os nome dos campos da edição das paginas*/
    private static function dadosPaginas($field=null){
        
        $slug = new HandleUrl();
        
        $dadosPage['nome']          = filter_input(INPUT_POST, 'nome');
        $dadosPage['resenha']       = filter_input(INPUT_POST, 'resenha');
        $dadosPage['conteudo']      = filter_input(INPUT_POST, 'conteudo');
        $dadosPage['resenha']       = filter_input(INPUT_POST, 'resenha');
        $dadosPage['destaque']      = !empty(filter_input(INPUT_POST, 'destaque'))?1:0;
        $dadosPage['visivel']       = !empty(filter_input(INPUT_POST, 'visivel'))?1:0;
        $dadosPage['publicada']     = !empty(filter_input(INPUT_POST, 'publicada'))?1:0;
        $dadosPage['comentario']    = !empty(filter_input(INPUT_POST, 'comentario'))?1:0;
        $dadosPage['compartilhar']  = !empty(filter_input(INPUT_POST, 'compartilhar'))?1:0;
        $dadosPage['tipo']          =  filter_input(INPUT_POST, 'tipo');
        $dadosPage['url_pagina']    =  $slug->slugStringUrl($dadosPage['nome']);
        $dadosPage['title_seo']     =  filter_input(INPUT_POST, 'title_seo');
        $dadosPage['keywords_seo']  =  filter_input(INPUT_POST, 'keywords_seo');
        $dadosPage['metastag_seo']  =  filter_input(INPUT_POST, 'metastag_seo');
        return (is_null($field)) ? $dadosPage : $dadosPage[$field];
    }
    
    /*cadastrar pagina*/
    public function cadastrar(){
        try {
            if(trim(self::dadosPaginas('nome'))==''){
                throw new Exception("Campo nome da pagina e obrigatorio");
            }else{
                
                $id_page = empty(filter_input(INPUT_POST, 'id'))?NULL:filter_input(INPUT_POST, 'id');
                if(!is_null($id_page)){
                    $exc = json_decode($this->atualizar($id_page));
                }else{
                    $exc = json_decode($this->db->Insert($this->tabelaPagina, self::dadosPaginas()));
                }
                return json_encode(['status'=>$exc->status,'msg'=>$exc->msg,'id_page'=>$this->db->lastId]);
                
            }
        } catch (Exception $ex) {
            return json_encode(['status'=>false,'msg'=>$ex->getMessage()]);
        }
    }
    
    /*atualizar pagina*/
    public function atualizar($id){
        try {
            if(empty($id)){
                throw new Exception("Indentificador da pagina nao encontrado....");
            }else{
                 $exc = json_decode($this->db->update($this->tabelaPagina, self::dadosPaginas(), "id={$id}" ));
                 return json_encode(['status'=>$exc->status,'msg'=>$exc->msg,'id_page'=>$this->db->lastId]);
            }
        } catch (Exception $ex) {
            return json_encode(['status'=>false,'msg'=>$ex->getMessage()]);
        }
    }
    
    /*Lista as paginas*/
    public function listar($id_page=null){
        $addFiltro = null;
        if(!is_null($id_page) && !empty($id_page)){ $addFiltro = " AND  id = {$id_page} ";  }
        $filtro = "1=1 ";
        $filtro.= $addFiltro;
        $filtro.= " ORDER BY nome";        
        $dados = $this->db->select($this->tabelaPagina,"*",$filtro);
        return $dados;
        
    }
    
    /*Apagar as paginas*/
    public function deletar($id){
        try{
           if(empty($id)){
              throw new Exception("Indentificador da pagina nao encontrado...."); 
           }
           $del = json_decode($this->db->delete($this->tabelaPagina,"id={$id}"));
           return json_encode(['status'=>$del->status,'msg'=>$del->msg]);
           //return json_encode(['status'=>false,'msg'=>"sucesso"]);
        }catch(Exception $exc) {
            return json_encode(['status'=>false,'msg'=>$ex->getMessage()]);
        }
    }
    
    /*Altera o modo da pagina(Normal/Revista/Tabela)*/
    protected function alteraModo($id_pagina,$modelo){
        $upd = json_decode($this->db->update($this->tabelaPagina, array("modelo"=>$modelo), "id={$id_pagina}"));
        return json_encode(array("status"=>$upd->status,"msg"=>$upd->msg));
    }
    

}
